// 用法：
// let date = new Date()
// dateFormat(date, "YYYY-MM-DD HH:mm:ss" )
// dateFormat(date, "YYYY年MM月DD日 HH时mm分ss秒" )
// >>> 2019-06-06 19:45`
export const dateFormat = (date, fmt) => {
    let ret;
    if(!(date instanceof Date)) {
        date = new Date(date)
    }
    const opt = {
        "Y+": date.getFullYear().toString(),        // 年
        "M+": (date.getMonth() + 1).toString(),     // 月
        "D+": date.getDate().toString(),            // 日
        "H+": date.getHours().toString(),           // 时
        "m+": date.getMinutes().toString(),         // 分
        "s+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        }
    }
    return fmt;
}

/**
 * @description
 * 时分秒倒计时
 * @param {Number} second -参数秒
 * @returns {Object} {h,m,s,id} -返回对象{h,m,s,id},暴露id给使用者，用来清除定时器
 */

export function countTime (second) {
  let d = null
  let h = null
  let m = null
  let s = null
  //时间差
  var leftTime = second;
  //定义变量 d,h,m,s保存倒计时的时间
  if (leftTime >= 0) {
    d = Math.floor(leftTime / 60 / 60 / 24);
    h = Math.floor(leftTime / 60 / 60 % 24);
    m = Math.floor(leftTime / 60 % 60);
    s = Math.floor(leftTime % 60);
  }
  //递归每秒调用countTime方法，显示动态时间效果
  // const id = setTimeout(countTime(second), 1000);
  h = String(h).padStart(2, 0)
  m = String(m).padStart(2, 0)
  s = String(s).padStart(2, 0)
  return { d, h, m, s }
}


export function countHours (second) {
  let d = null
  let h = null
  let m = null
  let s = null
  //时间差
  var leftTime = second;
  //定义变量 d,h,m,s保存倒计时的时间
  if (leftTime >= 0) {
    d = Math.floor(leftTime / 60 / 60 / 24);
    h = Math.floor(leftTime / 60 / 60 % 24) + (d * 24);
    m = Math.floor(leftTime / 60 % 60);
    s = Math.floor(leftTime % 60);
  }
  //递归每秒调用countTime方法，显示动态时间效果
  // const id = setTimeout(countTime(second), 1000);
  h = String(h).padStart(2, 0)
  m = String(m).padStart(2, 0)
  s = String(s).padStart(2, 0)
  return { d, h, m, s }
}

// 计算相对时间
export const relativeTime = (dateString) => {
  const parsedData = dateString
  const relativeTo = new Date()
  let delta = parseInt((relativeTo.getTime() - parsedData) / 1000)
  if(delta < 60) {
    return '刚刚'
  } else if (delta < 120) {
    return '1分钟前'
  } else if (delta < (60 * 60)) {
    return (parseInt(delta / 60).toString + '分钟前')
  } else if (delta < (120 * 60)) {
    return '1小时前'
  } else if (delta < (24 * 60 * 60)) {
    return '' + (parseInt(delta / 3600)).toString() + '小时前'
  } else if (delta < (48 * 60 * 60)) {
    return '1天前'
  } else {
    return (parseInt(delta / 86400).toString + '天前')
  }
}